//批量上传file max5
import request from "../request";
import type { ApiResponse } from "../request";

/**
 * 图片上传响应数据结构
 */
export interface ImageUploadResponse {
  fileId: string;
  fileUrl: string;
  fileName: string;
  fileSize: string;
  fileType: string;
  extension: string;
  md5: string;
  fileInfo: {
    width: number;
    height: number;
    transparency: number;
  };
}

export const ImageUpload = async (
  file: File
): Promise<ApiResponse<ImageUploadResponse>> => {
  // 创建 FormData 对象
  const formData = new FormData();
  // 添加文件到 FormData，使用 'file' 作为参数名
  formData.append("file", file);

  return request.post("/file/upload/image", formData, {
    headers: {
      "Content-Type": "multipart/form-data",
    },
  });
};

/**
 * 根据图片上传响应生成特定格式的Markdown图片引用
 *
 * @param responses 上传图片响应数据数组
 * @param userInput 用户输入的文本
 * @returns 特定格式的Markdown图片引用字符串
 */
export const generateCustomImageMarkdown = (
  responses: ImageUploadResponse[],
  userInput: string = ""
): string => {
  if (!responses || responses.length === 0) {
    return "";
  }

  // 如果只有一张图片，使用单图片格式
  if (responses.length === 1) {
    // 单图片格式: ![file](url) xxx
    const { fileUrl } = responses[0];
    // 用户输入不为空时，在图片引用后添加空格和用户输入
    // 添加特殊标记 <!-- img:URL --> 这样前端可以识别并显示为图片
    return userInput
      ? `![file](${fileUrl}) ${userInput}`
      : `![file](${fileUrl})`;
  } else {
    // 多图片格式: ![fileId](图片URL1)![fileId](图片URL2) 用户输入
    const imagesMarkdown = responses
      .map(({ fileId, fileUrl }) => {
        return `![${fileId}](${fileUrl})`;
      })
      .join("");

    // 用户输入不为空时，在图片引用后添加空格和用户输入
    return userInput ? `${imagesMarkdown} ${userInput}` : imagesMarkdown;
  }
};
